package com.qidianit.mes.masterdata.util;

import com.qidianit.mes.common.pojo.MesResult;
import com.qidianit.mes.common.util.FormatterUtil;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.HashMap;

/**
 * @author 戴着假发的程序员
 * @company 起点编程
 * @date 2025/7/23 10:29
 * @description
 */
@Component
public class QiniuUploadTools {

    // 相关的配置从配置文件中获取
    @Value("${accessKey}")
    private String accessKey;
    @Value("${secretKey}")
    private String secretKey;
    @Value("${bucket}")
    private String bucket;
    @Value("${qiniuBaseUrl}")
    private String qiniuBaseUrl; // 空间的默认访问域名
    public MesResult<String> upload(byte[] bytes){
        // 完成文件上传
        // 文件名，可以不指定，使用默认的hash值。
        String key = null;
        // 生成认真对象
        Auth auth = Auth.create(accessKey, secretKey);
        // 获取上传的token
        String upToken = auth.uploadToken(bucket);
        //构造一个带指定 Region 对象的配置类
        // 参数Region.region0()是可以不传递的，默认会自动查找区域，但是如果我们知道自己的服务器区域，建议直接设置，这样上传速度更快
        Configuration cfg = Configuration.create(Region.region2());
        cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
        // 通过配置创建一个UploadManager对象
        UploadManager uploadManager = new UploadManager(cfg);
        try {
            // 调用put方法上传
            Response response = uploadManager.put(bytes, key, upToken);
            // 响应状态
            int statusCode = response.statusCode;
            // 响应信息
            String body = response.bodyString();//{"hash":"Fje_fBBL8LATG7dHxDq6ojWiYNnq","key":"Fje_fBBL8LATG7dHxDq6ojWiYNnq"}
            if (statusCode == 200) {
                // 将body转换为map
                HashMap hashMap = FormatterUtil.fromJsonString(body, HashMap.class);
                String hash = hashMap.get("hash").toString();
                // 图片的访问地址
                String url = qiniuBaseUrl + hash;
                // 图片的访问地址放在MesResult中返回即可
                return MesResult.success(url);
            } else {
                return MesResult.error();
            }
        } catch (QiniuException e) {
            Response response = e.response;
            return MesResult.error();
        }
    }
}
